package com.demo.module.config.sharding.DataSource;

/**
 * <p> @Title DataSourceConfig
 * <p> @Description 动态数据源配置（切换为sharding-jdbc数据源 => @DS(DataSourceConfig.SHARDING_DATA_SOURCE_NAME)）
 *
 * @author ACGkaka
 * @date 2022/12/21 16:01
 */
//@Configuration
//@AutoConfigureBefore({DynamicDataSourceAutoConfiguration.class, SpringBootConfiguration.class})
public class DataSourceConfig {
//    /**
//     * 分表数据源名称
//     */
//    public static final String SHARDING_DATA_SOURCE_NAME = "ds0";
//    /**
//     * 动态数据源配置项
//     */
//    @Autowired
//    private DynamicDataSourceProperties properties;
//
//    /**
//     * sharding-jdbc有四种数据源，需要根据业务注入不同的数据源
//     * <p>
//     * 1.未使用分片, 脱敏的名称(默认): shardingDataSource;
//     * 2.主从数据源: masterSlaveDataSource;
//     * 3.脱敏数据源：encryptDataSource;
//     * 4.影子数据源：shadowDataSource
//     */
//    @Lazy
//    @Resource
//    private AbstractDataSourceAdapter shardingDataSource;
//
//    @Bean
//    public DynamicDataSourceProvider dynamicDataSourceProvider() {
//        Map<String, DataSourceProperty> datasourceMap = properties.getDatasource();
//        return new AbstractDataSourceProvider() {
//            @Override
//            public Map<String, DataSource> loadDataSources() {
//                Map<String, DataSource> dataSourceMap = createDataSourceMap(datasourceMap);
//                // 将 shardingjdbc 管理的数据源也交给动态数据源管理
//                dataSourceMap.put(SHARDING_DATA_SOURCE_NAME, shardingDataSource);
//                return dataSourceMap;
//            }
//        };
//    }
//
//    /**
//     * 将动态数据源设置为首选的
//     * 当spring存在多个数据源时, 自动注入的是首选的对象
//     * 设置为主要的数据源之后，就可以支持sharding-jdbc原生的配置方式了
//     */
//    @Primary
//    @Bean
//    public DataSource dataSource(DynamicDataSourceProvider dynamicDataSourceProvider) {
//        DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();
//        dataSource.setPrimary(properties.getPrimary());
//        dataSource.setStrict(properties.getStrict());
//        dataSource.setStrategy(properties.getStrategy());
//        dataSource.setProvider(dynamicDataSourceProvider);
//        dataSource.setP6spy(properties.getP6spy());
//        dataSource.setSeata(properties.getSeata());
//        return dataSource;
//    }
}
